#include "sortvisualizerwidget.h"
#include <QPainter>
#include <QDebug>

// 构造函数
SortVisualizerWidget::SortVisualizerWidget(QWidget *parent)
    : QWidget(parent)
{
    setMinimumHeight(300);       // 设置最小高度，避免显示区域太小
    setAutoFillBackground(true); // 自动填充背景颜色
}

// 接收外部算法传入的数据，并请求 Qt 系统重绘界面
void SortVisualizerWidget::updateWithData(const QVector<SortBar> &data) {
    bars = data;   // 更新当前柱状图数据
    update();      // 触发 Qt 的 paintEvent 重绘事件
}

// 绘图事件：当调用 update() 或窗口刷新时自动触发
void SortVisualizerWidget::paintEvent(QPaintEvent *) {
    QPainter painter(this);  // 创建画家对象，用于绘制图形
    painter.setRenderHint(QPainter::Antialiasing);  // 开启抗锯齿，图形更平滑

    int barCount = bars.size();  // 获取柱状图总数
    if (barCount == 0) return;   // 如果没有数据就不绘制

    // 计算每个柱状条的宽度，使它们平均分布在控件宽度内
    int barWidth = width() / barCount;

    // 遍历所有柱状条并绘制
    for (int i = 0; i < barCount; ++i) {
        int x = i * barWidth;            // 当前柱状条的左上角 x 坐标
        int h = bars[i].value;           // 高度为柱状条的数值
        int y = height() - h;            // y 坐标从底部向上绘制

        // 构造矩形对象用于绘制单个柱状条
        QRect rect(x, y, barWidth - 2, h);  // -2 留出柱子间隔，避免挤在一起

        // 设置画刷颜色（取自 SortBar.color）
        painter.setBrush(bars[i].color);

        // 绘制矩形表示当前数值条
        painter.drawRect(rect);
    }
}
